package snmp;

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.json.JSONObject;

public class mqtttest {
    // MQTT 配置 —— 请根据你的实际情况修改
    private static final String BROKER = "tcp://192.168.88.217:1883"; // MQTT Broker 地址（换成你的）
    private static final String TOPIC = "exp32/dht22";               // 订阅的主题（和 ESP32 发布的主题一致）
    private static final String CLIENT_ID = "PC_MQTT_Client";//""PC_MQTT_Client";      // 客户端 ID，可自定义

    public static void main(String[] args)
    {
        try
        {
            // 创建 MQTT 客户端（使用内存持久化，不需要保存到磁盘）
            MemoryPersistence persistence = new MemoryPersistence();
            MqttClient mqttClient = new MqttClient(BROKER, CLIENT_ID, persistence);

            // 设置连接选项（这里用匿名登录，如果你的 Broker 启用了用户名密码，请参考下面注释配置）
            MqttConnectOptions connOpts = new MqttConnectOptions();
            connOpts.setCleanSession(true); // 每次连接都是新的会话

            System.out.println("🔌 正在连接到 MQTT Broker: " + BROKER);
            mqttClient.connect(connOpts);
            System.out.println("✅ MQTT 连接成功！");

            // 设置消息到达时的回调
            mqttClient.setCallback(new MqttCallback()
            {
                @Override
                public void connectionLost(Throwable cause)
                {
                    System.err.println("❌ 与 MQTT Broker 的连接已断开: " + cause.getMessage());
                }

                @Override
                public void messageArrived(String topic, MqttMessage message)
                {
                    try
                    {
                        String payload = new String(message.getPayload());
                        System.out.println("\n📩 收到 MQTT 消息 [主题: " + topic + "]");
                        System.out.println("原始数据: " + payload);

                        // 解析 JSON 数据
                        JSONObject json = new JSONObject(payload);
                        double temperature = json.getDouble("temperature");
                        double humidity = json.getDouble("humidity");

                        System.out.println("✅ 解析成功:");
                        System.out.printf("   🌡️ 温度: %.1f °C\n", temperature);
                        System.out.printf("   💧 湿度: %.1f %%\n", humidity);

                        // TODO: 你可以在这里将数据存入数据库、更新 UI、触发告警等

                    }
                    catch (Exception e)
                    {
                        System.err.println("❌ 解析 JSON 或处理消息时出错: " + e.getMessage());
                        e.printStackTrace();
                    }
                }

                @Override
                public void deliveryComplete(IMqttDeliveryToken token)
                {
                    // 不需要实现，因为我们只是订阅者，不发布消息
                }
            });

            // 订阅主题
            System.out.println("🔔 正在订阅 MQTT 主题: " + TOPIC);
            mqttClient.subscribe(TOPIC);
            System.out.println("✅ 已订阅，开始接收数据。按 Ctrl+C 停止程序。");

            // 保持程序运行，持续接收 MQTT 消息
            // 这里用 while(true) 简单阻塞主线程，实际项目中可能用 Spring Boot 等框架
            while (true)
            {
                Thread.sleep(1000);
            }

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
